package com.st.qdmall.controller;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.st.qdmall.entity.Goods;
import com.st.qdmall.entity.Order;
import com.st.qdmall.entity.User;
import com.st.qdmall.service.IGoodsService;
import com.st.qdmall.service.IOrderService;

/**
 * 在com.st.qdmall包上，右键->new -> package
 * 在弹出的窗口中，输入com.st.qdmall.controller
 * 
 * 在com.st.qdmall.controller包上，右键->new -> class
 * 命名为IndexController
 * 
 * 在IndexController上添加注解
 *	@ Controller
 *	这个注解是Spring的注解
 *		1） 告诉Spring容器，这个类需要创建一个对象放在容器中
 *		2)  作为一动态页面
 */

@Controller
public class IndexController {
	
	@Autowired
	private IGoodsService goodsService;
	@Autowired
	private IOrderService orderService;

	// 将index方法，绑定到/index.do的路径上
	@RequestMapping("/index.do")
	// ModelAndView 数据模型和视图
	public ModelAndView index(String name,
			ModelAndView mv,
			HttpServletResponse response) {
		
		// 向MV中添加数据
		mv.addObject("name", name);
		
		// 获取所有的商品信息
		List<Goods> goodsList = goodsService.getAll();
		
		// 传递到MV中
		mv.addObject("goodsList", goodsList);
		
		// 传递视图
		mv.setViewName("index");
		
		return mv;
	}
	
	/**
	 * 购买的页面
	 */
	@GetMapping("/buy.do")
	public ModelAndView buy(
			Integer id,
			ModelAndView mv) {
		
		// 获取当前购买的商品的信息
		Goods goods = goodsService.getById(id);
		mv.addObject("goods", goods);
		
		mv.setViewName("buy");
		return mv;
	}
	
	/**
	 * 处理用户的购买请求
	 */
	@PostMapping("/buy.do")
	public ModelAndView buy(
			Order order,
			HttpSession session,
			ModelAndView mv) {
		
		// 获取当前登录用户
		User user = (User) session.getAttribute("user");
		order.setUser_id(user.getId());
		
		// 生成订单的过程
		// 订单： 商品ID，用户ID，  地址信息， 
		int res = orderService.add(order);
		
		if (res > 0) {
			// 购买成功
			// 跳转到我的订单页面
			mv.setViewName("redirect:myOrder.do");
		} else if (res == -2) {
			// 库存不足
			mv.addObject("error", "库存不足！");
			mv.setViewName("redirect:index.do");
		} else if (res == -3) {
			// 商品库存更新失败
			mv.addObject("error", "商品库存更新失败");
			mv.setViewName("redirect:index.do");
		}
		
		return mv;
	}
	
	@RequestMapping("/code.do")
	public void code(HttpServletResponse response) {
		
		ByteArrayOutputStream output = new ByteArrayOutputStream();
		String str = VerifyCode.getCodeImg(output);
		System.out.println(str);
		OutputStream out;
		try {
			out = response.getOutputStream();
			out.write(output.toByteArray());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}











